約 5,005,693 件
https://w.atwiki.jp/soyjoynice/pages/20.html
【AngularJS】 JavaScriptの、どのfunctionを使うか、みたいな。 ex) script type="text/javascript" function SettingController() { this.name = "John"; } SettingController.prototype = { greet function() { alert(this.name); } }; /script div ng controller="SettingController" Name input type="text" name="name" / [ a href="" ng click="greet()" greet /a ] br / /div * * * 結果: Name 【テキストボックス(初期値:「John」)】[ greet(←押せる)] 「greet」を押すと「John」と書かれたアラートボックスが出る。 SettingController という関数で独自に内容をつくり、 divタグに ng controller="SettingController" と書くことで、 div /div で囲まれたところの中で使う関数としてSettingControllerを指定。
https://w.atwiki.jp/ysflight/pages/37.html
目次 目次 航空管制基礎編1 IFRとVFR 2 Flight Level 3 高度制限 4 無線呼出符号(コールサイン)4.1 管制機関 4.2 民間航空機 4.3 軍用航空機(自衛隊機・米軍機等) 航空管制基礎編 1 IFRとVFR ◯IFR - (本格派にオススメ) 通る空域に管制官がいればその管制官とコンタクトしなければならない。 霧や雲で視界が得られなくても計器によって飛ぶことができる。 フライトプランをファイルして、必ず計器を使って申請した経路を飛ぶ。 管制管から管制間隔を受ける。 ◯VFR - (エアライン以外(軍用機とか)にオススメ。管制とかよくわからない場合でもVFRがオススメ。) VFRでもタワーなどの、混雑する特殊空域では管制を受けなくてはいけない。 管制官がVFR機に対して管制間隔を提供している空域を除いて、他機を避ける責任はパイロットにある。 視界が確保されないとVFRはできない。(D鯖では自分で天候を設定できるので、ちゃんと視界を確保すること) 計器は参考のために使える。ただし使わなくてもいい。 フライトプランは必要ではない。 管制官からトラフィック情報を要求することが出来る。 2 Flight Level 14,000〜41,000ftの巡航高度で、フィートから1と10の位をとりはずした数 例:15000ft.→FL150 ※巡航高度の設定 西向き(0~179度) 偶数×1000ft 東向き(180~359度) 奇数×1000ft FL410以上では垂直間隔2000ftで設定する(RVSM適用外)。 VFRの巡航高度の設定はIFRの設定に500ft加えたものとする。 3 高度制限 10000ft以下→250kts 3000ft以下→200kts 4 無線呼出符号(コールサイン) 4.1 管制機関 管制区分 呼出符号 設置飛行場 管制区管制所 CONTROL(コントロール) 東京・福岡・那覇 ターミナル管制所 RADAR(レーダー) 関西・高松・岩国 ターミナル管制所入域管制席 APPROACH(アプローチ) 小松・関西・高松・米子・広島・徳島・高知・福岡・長崎・大分・熊本・宮崎・鹿児島 ターミナル管制所出域管制席 DEPARTURE(ディパーチャー) 小松・関西・高松・米子・広島・徳島・高知・福岡・長崎・大分・熊本・宮崎・鹿児島 ターミナル管制所TCA管制席 TCA(ティーシーエー) 小松・関西・高松・福岡・長崎・熊本・宮崎・鹿児島 飛行場管制所 TOWER(タワー) 主要な空港のほぼ全て 飛行場管制所地上管制席 GROUND(グランド) 小松・八尾・伊丹・関西・米子・徳島・福岡・長崎・大分・熊本・宮崎・鹿児島 飛行場管制所管制承認伝達席 DELIVERY(デリバリー) 伊丹・関西・福岡・鹿児島 着陸誘導管制所 GCA(ジーシーエー) 小松・米子・徳島・那覇 飛行場対空援助局 RADIO(レディオ) 南紀白浜・鳥取・出雲・石見・山口宇部・佐賀・対馬・五島福江 他飛行場援助局 REMOTE(リモート) 新千歳FSC(礼文・利尻・紋別・奥尻) 仙台FSC(佐渡) 東京FSC(三宅・伊豆{新島・神津島}) 中部FSC(福井) 大阪FSC(但馬・隠岐) 福岡FSC(壱岐・上五島・小値賀) 鹿児島FSC(屋久島・徳之島・沖永良部・与論・喜界) 那覇FSC(久米島・慶良間・栗国・大東{北大東・南大東}・多良間・波照間・与那国) デリバリー管制が未設置の空港ではグランド管制が、デリバリー・グランド管制が未設置の空港ではタワー管制が代わりに業務を行う。 4.2 民間航空機 会社名 コールサイン 2レター 3レター 北海道国際航空 AIR DO(エアドゥ) HD ADO 全日空 ALL NIPPON(オールニッポン) NH ANA エアーニッポン ANK AIR(アンクエア) EL ANK アイベックスエアラインズ IBEX(アイベックス) FW IBX 日本航空 JAPAN AIR(ジャパンエア) JL JAL 日本エアコミューター COMMUTER(コミューター) 3X JAC JALウェイズ J-WAYS(ジェイウェイズ) JO JAZ JALエクスプレス JANEX(ジャネックス) JC JEX 日本貨物航空 NIPPON CARGO(ニッポンカーゴ) KZ NCA 4.3 軍用航空機(自衛隊機・米軍機等) ◯陸上自衛隊 陸自機は機種ごとにコールサインが割り当てられている。 機種 コールサイン UH-1H/J HUNTER UH-60JA HIRYU AH-1S ATTACKER AH-64D APACHE CH-47J/JA CARRIER OH-1 OMEGA OH-6D OSCAR
https://w.atwiki.jp/xbox360score/pages/1790.html
Flight Control 項目数:16 総ポイント:200 ☆Windows Phone7用タイトル Get Around Play on each map at least once. 5 Air Wolf Land more than 10 helicopters in a single game. 5 Impatience is a Virtue Land more than 10 jets in a single game. 5 Medic! Have 5 emergency planes land in a single game. 5 Rush Hour Land 5 planes within 5 seconds. 10 Top-Gun Land over 50 planes on the Aircraft Carrier. 10 Holding Pattern After landing the first plane, keep the same plane on screen for more than 5 minutes. 15 No Pressure Play for more than 10 minutes in a single round. 15 No Fly Zone After landing the first plane, land no planes for two minutes. 15 Danger Zone Have more than 15 planes on screen at once. 20 Catastrophic Failure Have 3 separate collisions occur at the same time. 20 Crikey Land over 100 planes on a single map. 20 Fundamentals Land a cumulative total of 10 planes. 5 Centurion Land a cumulative total of 100 planes. 10 Millenial Man Land a cumulative total of 1000 planes. 15 Over Nine Thousand! Land a cumulative total of 10,000 planes. 25
https://w.atwiki.jp/sampleisbest/pages/68.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 PortChecker アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode PortChecker.iniの例 [General] file=D \etc\morse params=-l200 "トラ" PortChecker.cpp // インポート ライブラリ #pragma comment(lib, "ws2_32.lib") #include tchar.h #include WinSock2.h #include Windows.h #include CommCtrl.h #include "resource.h" #define SAFE_FREE(p)if (p) { free((void*)p); p = NULL; } #define SEC_GEN_T("General") // 関数プロトタイプ宣言 int GetIniFileName(void); INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg); void OnDestroy(HWND hDlg); void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue); void OnTimer(HWND hDlg); void OnOK(HWND hDlg); void StopTimer(HWND hDlg); void EnableCtrl(HWND hDlg, BOOL bEnable); int CheckPort(void); // グローバル変数 TCHARg_atcIniFile[_MAX_PATH] = _T(""); HWNDg_hProgress; HWNDg_hLabel; HBRUSHg_hBrush; UINTg_uiIDEvent = 0; charg_acHost[256]; intg_iPort; intg_iInterval; intg_iTimer; LPCTSTR lpFile = NULL; LPCTSTR lpParams = NULL; //============================================================================== int APIENTRY _tWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPTSTRlpCmdLine, intnCmdShow) { WSADATAwsaData; intiRet; // WinSockDLLの初期化 iRet = WSAStartup(MAKEWORD(2, 2), wsaData); if (iRet != 0) { return 0; } if (GetIniFileName()) { return 0; } DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DialogProc); WSACleanup(); return 0; } //------------------------------------------------------------------------------ int GetIniFileName(void) { TCHARatcPath[_MAX_PATH]; TCHARatcDrive[_MAX_DRIVE]; TCHARatcDir[_MAX_DIR]; TCHARatcFName[_MAX_FNAME]; TCHARatcExt[_MAX_EXT]; if (GetModuleFileName(NULL, atcPath, _countof(atcPath)) == 0) { return -1; } if (_tsplitpath_s(atcPath, atcDrive, atcDir, atcFName, atcExt) != 0) { return -1; } if (_tmakepath_s(g_atcIniFile, atcDrive, atcDir, atcFName, _T("ini")) != 0) { return -1; } return 0; } //------------------------------------------------------------------------------ INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTRiRetVal = TRUE;// メッセージを処理した switch (uMsg) { case WM_TIMER OnTimer(hDlg); break; case WM_CTLCOLORSTATIC iRetVal = FALSE; if ((HWND)lParam == g_hLabel) { iRetVal = (INT_PTR)g_hBrush; } break; case WM_COMMAND switch (LOWORD(wParam)) { case IDOK OnOK(hDlg); break; case IDCANCEL // タイマー停止 StopTimer(hDlg); break; } break; case WM_INITDIALOG OnInitDialog(hDlg); SetFocus(GetDlgItem(hDlg, IDOK)); iRetVal = FALSE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE // タイマー停止 StopTimer(hDlg); EndDialog(hDlg, 0); break; case WM_DESTROY OnDestroy(hDlg); break; default iRetVal = FALSE;// メッセージを処理しなかった } return iRetVal; } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { TCHARatcStr[256]; intiX; intiY; iX = GetPrivateProfileInt(SEC_GEN, _T("iX"), 0, g_atcIniFile); iY = GetPrivateProfileInt(SEC_GEN, _T("iY"), 0, g_atcIniFile); SetWindowPos(hDlg, HWND_TOP, iX, iY, 0, 0, SWP_NOSIZE); GetPrivateProfileString(SEC_GEN, _T("url"), _T(""), atcStr, _countof(atcStr), g_atcIniFile); SetDlgItemText(hDlg, IDC_EDIT_URL, atcStr); g_iInterval = GetPrivateProfileInt(SEC_GEN, _T("iInterval"), 0, g_atcIniFile); _stprintf_s(atcStr, _T("%d"), g_iInterval); SetDlgItemText(hDlg, IDC_EDIT_INTERVAL, atcStr); GetPrivateProfileString(SEC_GEN, _T("file"), _T(""), atcStr, _countof(atcStr), g_atcIniFile); lpFile = _tcsdup(atcStr); GetPrivateProfileString(SEC_GEN, _T("params"), _T(""), atcStr, _countof(atcStr), g_atcIniFile); lpParams = _tcsdup(atcStr); g_hProgress = GetDlgItem(hDlg, IDC_PROGRESS); g_hLabel = GetDlgItem(hDlg, IDC_LABEL); g_hBrush = CreateSolidBrush(RGB(0xFF,0x00,0x00)); ShowWindow(g_hLabel, SW_HIDE); } //------------------------------------------------------------------------------ void OnDestroy(HWND hDlg) { RECTrc; TCHARatcStr[256]; GetWindowRect(hDlg, rc); WriteIniFileInt(SEC_GEN, _T("iX"), rc.left); WriteIniFileInt(SEC_GEN, _T("iY"), rc.top); GetDlgItemText(hDlg, IDC_EDIT_URL, atcStr, _countof(atcStr)); WritePrivateProfileString(SEC_GEN, _T("url"), atcStr, g_atcIniFile); WriteIniFileInt(SEC_GEN, _T("iInterval"), g_iInterval); SAFE_FREE(lpFile); SAFE_FREE(lpParams); DeleteObject(g_hBrush); } //------------------------------------------------------------------------------ void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue) { TCHARatcBuf[16]; _stprintf_s(atcBuf, _T("%d"), iValue); WritePrivateProfileString(ptcSec, ptcKey, atcBuf, g_atcIniFile); } //------------------------------------------------------------------------------ void OnTimer(HWND hDlg) { intiRet; // タイマーを1減らす g_iTimer--; SendMessage(g_hProgress, PBM_SETPOS, g_iTimer, 0); ShowWindow(g_hLabel, (g_iTimer 1) ? SW_SHOWNA SW_HIDE); if (0 g_iTimer) { return; } // タイマーが0になったら処理を行う iRet = CheckPort(); if (iRet 0) { StopTimer(hDlg); MessageBox(hDlg, _T("IPアドレスの取得に失敗しました"), NULL, MB_OK); return; } if (0 iRet) { StopTimer(hDlg); ShellExecute(hDlg, NULL, lpFile, lpParams, NULL, SW_SHOWNORMAL); MessageBox(hDlg, _T("サーバーへの接続に成功しました"), _T("通知"), MB_OK); return; } g_iTimer = g_iInterval; //SendMessage(g_hProgress, PBM_SETPOS, g_iTimer, 0); } //------------------------------------------------------------------------------ void OnOK(HWND hDlg) { TCHARatcStr[256]; TCHAR*ptcHost; TCHAR*ptcPort; TCHAR*ptc; size_tsize; // インターバル秒数の取得 GetDlgItemText(hDlg, IDC_EDIT_INTERVAL, atcStr, _countof(atcStr)); g_iInterval = _tstoi(atcStr); // URL GetDlgItemText(hDlg, IDC_EDIT_URL, atcStr, _countof(atcStr)); // ホスト ptc = _tcsstr(atcStr, _T(" //")); if (ptc == NULL) { ptcHost = atcStr; } else { ptcHost = ptc + 3; ptc[2] = _T( \0 ); } // ポート ptc = _tcspbrk(ptcHost, _T(" ")); if (ptc == NULL) { MessageBox(hDlg, _T("ポート番号がありません"), NULL, MB_OK); return; } else { ptc[0] = _T( \0 ); ptcPort = ptc + 1; } wcstombs_s( size, g_acHost, ptcHost, 256); g_iPort = _tstoi(ptcPort); // コントロール無効化 EnableCtrl(hDlg, FALSE); // タイマー発行 g_uiIDEvent = SetTimer(hDlg, 1, 1000, NULL); g_iTimer = 1; SendMessage(g_hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, g_iInterval)); SendMessage(g_hProgress, PBM_SETPOS, g_iTimer, 0); } //------------------------------------------------------------------------------ // タイマー停止 void StopTimer(HWND hDlg) { if (g_uiIDEvent != 0) { KillTimer(hDlg, g_uiIDEvent); g_uiIDEvent = 0; } SendMessage(g_hProgress, PBM_SETPOS, 0, 0); ShowWindow(g_hLabel, SW_HIDE); // コントロール有効化 EnableCtrl(hDlg, TRUE); } void EnableCtrl(HWND hDlg, BOOL bEnable) { EnableWindow(GetDlgItem(hDlg, IDC_EDIT_URL), bEnable); EnableWindow(GetDlgItem(hDlg, IDC_EDIT_INTERVAL), bEnable); EnableWindow(GetDlgItem(hDlg, IDOK), bEnable); } //------------------------------------------------------------------------------ int CheckPort(void) { HOSTENT*phe; SOCKADDR_INname; SOCKETsock = INVALID_SOCKET; intiFlgConnect = 0; intiRet; // IPアドレスの取得 phe = gethostbyname(g_acHost); if (phe == NULL) { return -1; } // サーバーに接続 sock = socket(AF_INET, SOCK_STREAM, 0); name.sin_family= AF_INET; name.sin_port= htons(g_iPort); name.sin_addr= *((IN_ADDR*)phe- h_addr); iRet = connect(sock, (SOCKADDR*) name, sizeof name); if (iRet != 0) { goto Exit; } iFlgConnect = 1; Exit if (iFlgConnect) { shutdown(sock, SD_BOTH); } if (sock != INVALID_SOCKET) { closesocket(sock); } return iFlgConnect; } resource.h #define IDD_MAIN_DIALOG100 #define IDC_STATIC-1 #define IDC_EDIT_URL1000 #define IDC_EDIT_INTERVAL1001 #define IDC_PROGRESS1002 #define IDC_LABEL1003 PortChecker.rc // リソーススクリプト #include windows.h #include "resource.h" IDD_MAIN_DIALOG DIALOGEX 0, 0, 240, 100 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "Port Checker" FONT 9, "MS Pゴシック" BEGIN LTEXT"URL( U) ",IDC_STATIC,8,8,32,12 EDITTEXTIDC_EDIT_URL,40,8,192,12,ES_AUTOHSCROLL LTEXT"間隔( I) ",IDC_STATIC,8,28,32,12 EDITTEXTIDC_EDIT_INTERVAL,40,28,24,12 LTEXT"秒",IDC_STATIC,68,28,12,12 LTEXT"http //host port\nhost port",IDC_STATIC,100,24,100,24 CONTROL"",IDC_PROGRESS,"msctls_progress32",WS_BORDER,8,48,224,12 LTEXT"",IDC_LABEL,8,68,32,12 DEFPUSHBUTTON"開始( S)",IDOK,132,76,48,16 PUSHBUTTON"中止( C)",IDCANCEL,184,76,48,16 END
https://w.atwiki.jp/intensity/pages/25.html
//----------------------------------------------------------------------------- // $Id DecklinkCaptureDlg.h,v 1.5 2006/04/11 01 11 07 ivanr Exp $ // // Desc DirectShow capture sample // // Copyright (c) Blackmagic Design 2005. All rights reserved. //----------------------------------------------------------------------------- #pragma once #include "afxwin.h" #include "Utils.h" // CDecklinkCaptureDlg dialog class CDecklinkCaptureDlg public CDialog { // Construction public CDecklinkCaptureDlg(CWnd* pParent = NULL);// standard constructor // Dialog Data enum { IDD = IDD_DECKLINKCAPTURE_DIALOG }; protected virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support afx_msg void OnCbnSelchangeComboVideodevice(); afx_msg void OnCbnSelchangeComboAudiodevice(); afx_msg void OnCbnSelchangeComboVideoformats(); afx_msg void OnCbnSelchangeComboAudioformats(); afx_msg void OnBnClickedCheckAudiomute(); afx_msg void OnBnClickedButtonBrowse(); afx_msg void OnBnClickedButtonCapture(); afx_msg void OnBnClickedButtonStop(); afx_msg void OnCbnSelchangeComboCompression(); // Implementation protected HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); virtual BOOL DestroyWindow(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); void HandleGraphEvent(); private IGraphBuilder* m_pGraph; IBaseFilter* m_pVideoCapture; IBaseFilter* m_pAudioCapture; IBaseFilter* m_pVideoRenderer; IBaseFilter* m_pSmartT; IMediaControl* m_pControl; IVideoWindow* m_pIVW;// for the preview window IMediaEventEx* m_pMediaEvent;// for the preview window DWORD m_ROTRegister; CComboBox m_videoDeviceCtrl; CComboBox m_audioDeviceCtrl; CComboBox m_videoFormatCtrl; CComboBox m_audioFormatCtrl; CComboBox m_compressionCtrl; CStatic m_preview; BOOL m_bAudioMute; int m_compressor; BOOL m_bEnableCompressionCtrl; enum { ENC_NONE, ENC_DV, ENC_WM }; CString m_captureFile; CEdit m_captureFileCtrl; VIDEOINFOHEADER m_vihDefault; WAVEFORMATEX m_wfexDefault; CRegUtils m_regUtils; HRESULT CreatePreviewGraph(); HRESULT CreateCaptureGraph(); HRESULT CreateUncompressedCaptureGraph(); HRESULT CreateDVCaptureGraph(); HRESULT CreateWMCaptureGraph(); HRESULT ConfigureWMEncoder(IBaseFilter* pASFWriter); HRESULT DestroyGraph(); void InitialiseVideoPreview(void); HRESULT PopulateDeviceControl(const GUID* pCategory, CComboBox* pCtrl); HRESULT PopulateVideoControl(); HRESULT PopulateAudioControl(); HRESULT PopulateCompressionControl(); void EnableControls(void); void DisableControls(void); void QueryRegistry(void); };
https://w.atwiki.jp/hmiku/pages/43524.html
【登録タグ GUMI MAIKA T VOCALOID YZYX 曲】 作詞:YZYX 作曲:YZYX 編曲:YZYX 唄:GUMI・MAIKA 曲紹介 Yes, this is a Wadanohara and The Great Blue Sea's song. YZYX氏ボカロPデビュー曲。 kuromoon氏の声で「MDML2」(C86)でリリースされた、Mogeko(海底囚人)氏のゲーム(漫画)「大海原と大海原」を基に作られた曲。 声の担当は、メインボイスはGUMI、笑い声とセリフはMAIKAである。 動画はHikusa氏が、イラストはRevanche7th氏、Rene Elric氏、Gehirnkaeter氏が手掛ける。 歌詞 (動画より書き起こし) I'm the witch who protects your sweet dreams. Trust in me, I just want to see, My loved world In harmony. All began like any other day, Everything in a normal way, Hear the waves, it's the sound from the sea, bringing calm when I see it, I wish knew about the destiny Gaze at fate with clarity A heartbeat, an inkling of something, Suddenly commences to invade a strange feeling What can be? I don't know. It's like a picture of a fate, But all turned red. Red will make you happy, don't you see? Is incredible how gullible you are. Just open your eyes. It's a vision from an uncertain existence, Submerged in a crimson sea the hopes rest don't surrender I ll show the strength of my heart, how my yearning never falls, I will raise my magic power, I will protect everyone I'm the witch who protects your sweet dreams. Trust in me, I just want to see, My loved world In harmony. In a blink, many things never seen, That appear in front of me. Can't believe, make damage is the aim, I wish it was just a game. In seconds the heartless intentions, Leaving all the reflections, In my way I met the wickedness, And this mind got dominated completely by fears. Why am I so weak? I feel powerless, This depresses, It's a sad problem, You're really easy to trick. You're a powerless witch. Just open your eyes. Darkness, conceals all the sentiments, all the blames, The sadness from all my friends, I don't want more it must be stopped I ll show the strength of my heart, how my yearning never falls, I will raise my magic power, I will protect everyone I'm the witch who protects your sweet dreams. Trust in me, I just want to see, My loved world In harmony. コメント 名前 コメント
https://w.atwiki.jp/nicoratch/pages/1169.html
概要 ジョグホイールに圧力検出センサーを搭載した2chDJコントローラー。DJUCEDTM DJ software同梱。 DJ Control Instinct +スペック表・DJ Control Instinct TECHNICAL SPECIFICATIONS DJUCEDTM DJ software Function-rich software for both beginners and advanced DJs User-friendly Get started mixing in just minutes the controller and the software fit perfectly together Instantly view the beats, track lengths, and which songs fit well for the next track to be played Rewarding Set the pitch intuitively or sync automatically for smooth transitions Customize your songs with loops, effects and samples Creative Create your own sound with filters or the step sequencer Save your mix in audio files you can share with your friends DJ control surface Born to mix Intuitive The mixer and deck areas are clearly differentiated The structure has the look and feel of 2 DJ CD players and a mixer Powerful Scratch tracks with no latency on pressure-detecting jog wheels Tweak your songs with hot cue, samples, loops and effects keys Stylish Gorgeous design glossy decks, brushed mixer, rubber on caps Orange backlights show the status of the controls DJ audio interface Mix and previewing outputs Play the mix on the rear panel outputs 2 formats for the mix 2 RCA and a 1/8" stereo mini-jack output Powerful enough for both hi-fi systems and PA system speakers Since both output formats play simultaneously, you can connect the RCA outputs to a PA system and the 1/8" mini-jack to DJ booth speakers Preview output on front panel 1/8" stereo mini-jack output for headphones Headphone controls on the controller cue select and volume Compatible with headphones from 32 to 600 ohms BOX CONTENTS Hercules DJControl Instinct Installation CD-ROM (PC/Mac) with PC/Mac DJ software Paper quick guide + online manual MINIMUM CONFIGURATION Computer CPU 1.5 GHz or faster 1 GB RAM or more (2 GB in 64-bit OS) Powered USB port 100 MB available hard disk space CD/DVD-ROM drive Internet access Amplified stereo speakers and headphones Operating system (32/64-bit) MS Windows® XP/Vista/7/8 or Mac OS® 10.6/10.7/10.8 (Core Duo) Drivers Mac OS® MIDI for controls Core Audio for audio playback Windows® MIDI for controls WDM and ASIO for audio playback Sampling rate 16-bit / 44.1 kHz stereo DJ Control Instinct http //www.hercules.com/uk/legacy/bdd/p/187/djcontrol-instinct/ DJControl Instinct S Series DJ Control Instinctのマイナーチェンジ版。 +スペック表・DJControl Instinct S Series TECHNICAL SPECIFICATIONS 2-deck control surface Pressure-detecting jog wheels Mixer controls in the center, and individual deck controls on the left and right Compact design Controller with built-in audio 4-channel playback For playing the mix 2 RCA outputs + 1/8" / 3.5 mm stereo mini-jack output for powered speakers 1/8" / 3.5 mm stereo mini-jack output for previewing tracks on headphones MINIMUM CONFIGURATION Minimum system requirements 2 GHz processor or faster 1 GB of RAM or more Powered USB port 100 MB hard drive space CD/DVD-ROM drive and/or Internet access Amplified stereo speakers and headphones Operating system Microsoft Windows® Vista / 7 / 8 / 8.1 or Mac OS® 10.7 / 10.8 / 10.9 / 10.10 on Mac Core Duo Drivers Mac OS® MIDI for controls Core Audio for audio playback Windows® MIDI for controls WDM and ASIO for audio playback Sample rate 16-bit / 44.1 kHz stereo 価格 £69.99 DJControl Instinct S Series http //www.hercules.com/uk/leisure-controllers/bdd/p/248/djcontrol-instinct-s-series/ DJControl Instinct P8 DJ Control Instinctのアップデートバージョン。パッドかマルチカラーになった。 +スペック表・DJControl Instinct P8 TECHNICAL SPECIFICATIONS Dual-deck DJ controller Built-in audio interface (mixing + preview outputs) 2 sets of 4 performance pads Included software DJUCEDTM 40° for Mac®/PC BOX CONTENTS DJControl Instinct P8 Printed Quick Start Guide USB cable MINIMUM CONFIGURATION DJUCEDTM 40° PC / MAC 2 GHz CPU or faster 2 GB RAM or more Windows 7 and higher (32 and 64-bit) Mac OS X 10.8 and higher (32 and 64-bit) Download DJUCEDTM 40° Optional drivers are available for download on Hercules website (ASIO and product firmware update) 価格 £ 89.99 DJControl Instinct P8 http //www.hercules.com/uk/leisure-controllers/bdd/p/261/djcontrol-instinct-p8/ DJControl Instinct for iPad iPadと接続が可能になった。(別途カメラコネクションキット等接続アダプタが必要のため注意) +スペック表・DJControl Instinct for iPad TECHNICAL SPECIFICATIONS Technical specifications USB DJ controller with audio outputs 2-deck DJ control surface •Pressure-detecting jog wheels •Compact size Built-in audio 4-channel playback •Mix output 2 RCA + 1/8" stereo mini-jack for active speakers •1/8" stereo mini-jack output for headphone previewing DJUCED DJ software •Intuitive, powerful software •Mix 2 audio tracks on the fly •Save the mix in an audio file Mechanical specifications •Casing 10.4 x 7.4" / 26.5 x 18.7 cm •Audio connectors mix (speakers) out on rear, headphones on front •Weight 2.2 lbs. / 1 kg •USB cable attached BOX CONTENTS Hercules DJControl Instinct for iPad Installation CD-ROM (PC/Mac) with PC/Mac DJ software Paper quick guide + online manual Extra cable for iPad Camera adapter and for power adapter with setup guide Apple® Lightning to USB Camera Adapter MINIMUM CONFIGURATION iPad® with Retina Display (with lightning connector) iPad® mini •Lightning to USB Camera Adapter (included) •iPad® Power Adapter (included with your iPad®) •iOS 6.1 and above iPad® 2, 3 •Camera Connection kit (not included) •iPad® Power Adapter •iOS 6.1 and above PC •MS XP, Vista, 7 and 8 32 64 bits •CPU 1.6GHz and faster / 2GB RAM MAC •Core Duo CPU •OSX 10.6, 10.7 10.8 32 64bits 価格 £99.99 DJControl Instinct for iPad http //www.hercules.com/uk/leisure-controllers/bdd/p/233/djcontrol-instinct-for-ipad/
https://w.atwiki.jp/pfwiki/pages/99.html
あこがれの一発屋で流れた挿入歌。 ベスト・ソング・カウントダウンの1位の曲でExtended Versionが流れた。 http //www.nicovideo.jp/watch/sm16552577 前 挿入歌 次 My Undead Mummy Gitchee Gitchee Goo He s a Bully It s Going So Badly 前 ベスト・ソング・カウントダウン 次 My Name is Doof Gitchee Gitchee Goo 無し 歌詞 通常バージョン フィニアス:バウチカバワウ キャンディス:耳を澄まそう フィニアス:マウマウマウ キャンディス:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:そうさ バウチカバワウ キャンディス:耳を澄まそう フィニアス:マウマウマウ キャンディス:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス:止まらない みんな:ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは 愛してる ベイビー ベイビー ベイビー ファーブ:べイビベイビベイビベイビ みんな:ギチ・ギチ・グーは愛してる! Extended Versio フィニアス:バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:赤ちゃん言葉で話しかけてくる 可愛いベイビー 喜ぶってわかってるのかな? もちろんメロメロさ! たまに思うこともある ファーベッツ:ウー フィニアス:なんて言ってんだろう?って でも不思議と伝わってくるんだ キャンディス、ファーベッツ:くるんだ 今こんなこと言ったよ みんな:教えてあげる フィニアス:バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:言葉は違っても キャンディス:違っても フィニアス:心は通じてる キャンディス:通じてる フィニアス:僕 アイラブユー ファーベッツ:アイラブユー フィニアス:ベイビー ギチ・ギチ・グー ユートゥー キャンディス、ファーベッツ:ギチ・ギチ・グー ユートゥー フィニアス:ベイビー ギチ・ギチ・グー ユートゥー キャンディス、ファーベッツ:ギチ・ギチ・グー ユートゥー フィニアス:辞書はいらない フィニアス:バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:そうさ バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:止まらない みんな:ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは 愛してる ベイビー ベイビー ベイビー ファーブ:べイビベイビベイビベイビ みんな:ギチ・ギチ・グーは愛してる!
https://w.atwiki.jp/bmd_intensity/pages/26.html
//----------------------------------------------------------------------------- // $Id DecklinkCaptureDlg.cpp,v 1.9 2006/04/11 01 11 07 ivanr Exp $ // // Desc DirectShow capture sample // // Copyright (c) Blackmagic Design 2005. All rights reserved. //----------------------------------------------------------------------------- #include "stdafx.h" #include "DecklinkCapture.h" #include "DecklinkCaptureDlg.h" #include initguid.h // TODO move this to a lib #include "DecklinkSample_uuids.h" #undef lstrlenW #ifdef _DEBUG #define new DEBUG_NEW #endif #define WM_GRAPHNOTIFYWM_APP+1// for Filter Graph event notification //----------------------------------------------------------------------------- // CAboutDlg //----------------------------------------------------------------------------- // CAboutDlg dialog used for App About class CAboutDlg public CDialog { public CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected DECLARE_MESSAGE_MAP() }; CAboutDlg CAboutDlg() CDialog(CAboutDlg IDD) { } void CAboutDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg dialog //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Constructor // CDecklinkCaptureDlg CDecklinkCaptureDlg(CWnd* pParent /*=NULL*/) CDialog(CDecklinkCaptureDlg IDD, pParent) , m_pIVW(NULL) { m_hIcon = AfxGetApp()- LoadIcon(IDR_MAINFRAME); } //----------------------------------------------------------------------------- // DoDataExchange // void CDecklinkCaptureDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_VIDEOFORMATS, m_videoFormatCtrl); DDX_Control(pDX, IDC_COMBO_AUDIOFORMATS, m_audioFormatCtrl); DDX_Control(pDX, IDC_STATIC_PREVIEW, m_preview); DDX_Control(pDX, IDC_EDIT_CAPTUREFILE, m_captureFileCtrl); DDX_Control(pDX, IDC_COMBO_COMPRESSION, m_compressionCtrl); DDX_Control(pDX, IDC_COMBO_VIDEODEVICE, m_videoDeviceCtrl); DDX_Control(pDX, IDC_COMBO_AUDIODEVICE, m_audioDeviceCtrl); } BEGIN_MESSAGE_MAP(CDecklinkCaptureDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_CBN_SELCHANGE(IDC_COMBO_VIDEOFORMATS, OnCbnSelchangeComboVideoformats) ON_CBN_SELCHANGE(IDC_COMBO_AUDIOFORMATS, OnCbnSelchangeComboAudioformats) ON_BN_CLICKED(IDC_CHECK_AUDIOMUTE, OnBnClickedCheckAudiomute) ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnBnClickedButtonBrowse) ON_BN_CLICKED(IDC_BUTTON_CAPTURE, OnBnClickedButtonCapture) ON_BN_CLICKED(IDC_BUTTON_STOP, OnBnClickedButtonStop) ON_CBN_SELCHANGE(IDC_COMBO_COMPRESSION, OnCbnSelchangeComboCompression) ON_CBN_SELCHANGE(IDC_COMBO_VIDEODEVICE, OnCbnSelchangeComboVideodevice) ON_CBN_SELCHANGE(IDC_COMBO_AUDIODEVICE, OnCbnSelchangeComboAudiodevice) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg message handlers //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // OnInitDialog // Called before the dialog is displayed, use this message handler to initialise // our app BOOL CDecklinkCaptureDlg OnInitDialog() { CDialog OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu- AppendMenu(MF_SEPARATOR); pSysMenu- AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application s main window is not a dialog SetIcon(m_hIcon, TRUE);// Set big icon SetIcon(m_hIcon, FALSE);// Set small icon // create a basic capture graph and preview the incoming video m_pGraph = NULL; m_pVideoCapture = NULL; m_pAudioCapture = NULL; m_pVideoRenderer = NULL; m_pSmartT = NULL; m_pControl = NULL; m_pIVW = NULL; m_pMediaEvent = NULL; m_ROTRegister = 0; m_bAudioMute = FALSE; m_compressor = 0; m_bEnableCompressionCtrl = TRUE; m_captureFile = " Select File "; // initialise default video media type ZeroMemory( m_vihDefault, sizeof(m_vihDefault)); m_vihDefault.AvgTimePerFrame = 333667; m_vihDefault.bmiHeader.biWidth = 720; m_vihDefault.bmiHeader.biHeight = 486; m_vihDefault.bmiHeader.biBitCount = 16; m_vihDefault.bmiHeader.biCompression = YVYU ; // initialise default audio media type ZeroMemory( m_wfexDefault, sizeof(m_wfexDefault)); m_wfexDefault.nChannels = 2;// the only field of interest // retrieve last state QueryRegistry(); m_captureFileCtrl.SetWindowText(m_captureFile); EnableControls(); // create a preview graph // add the filters that will be used by all the graphs; preview, uncompressed capture, dv capture, // mpeg capture and windows media capture HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, reinterpret_cast void** ( m_pGraph)); if (SUCCEEDED(hr)) { #ifdef _DEBUG hr = CDSUtils AddGraphToRot(m_pGraph, m_ROTRegister); #endif hr = m_pGraph- QueryInterface(IID_IMediaControl, reinterpret_cast void** ( m_pControl)); if (SUCCEEDED(hr)) { // locate the video capture devices hr = PopulateDeviceControl( CLSID_VideoInputDeviceCategory, m_videoDeviceCtrl); if (SUCCEEDED(hr)) { hr = PopulateDeviceControl( CLSID_AudioInputDeviceCategory, m_audioDeviceCtrl); if (SUCCEEDED(hr)) { PWSTR pVideoName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.SetCurSel(0)); PWSTR pAudioName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.SetCurSel(0)); if (pVideoName pAudioName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pVideoName, m_pVideoCapture); if (SUCCEEDED(hr)) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pAudioName, m_pAudioCapture); if (SUCCEEDED(hr)) { PopulateVideoControl();// populate the video format control with the video formats of the currently selected device PopulateAudioControl();// populate the audio format control with the audio formats of the currently selected device PopulateCompressionControl(); // locate video screen renderer for the preview window hr = CDSUtils AddFilter(m_pGraph, CLSID_VideoRendererDefault, L"Video Renderer", m_pVideoRenderer); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); } } } } } } } } return TRUE; // return TRUE unless you set the focus to a control } //----------------------------------------------------------------------------- // DestroyWindow // Called when the window is being destroyed, clean up and free all resources. BOOL CDecklinkCaptureDlg DestroyWindow() { m_regUtils.Close(); #ifdef _DEBUG CDSUtils RemoveGraphFromRot(m_ROTRegister); #endif DestroyGraph(); SAFE_RELEASE(m_pControl); // Hide Video Window and remove owner. This has to be done prior to // destroying any window that displays video/still. if (m_pIVW) { m_pIVW- put_Visible(OAFALSE); m_pIVW- put_Owner(NULL); } SAFE_RELEASE(m_pIVW); SAFE_RELEASE(m_pMediaEvent); SAFE_RELEASE(m_pVideoRenderer); SAFE_RELEASE(m_pAudioCapture); SAFE_RELEASE(m_pVideoCapture); SAFE_RELEASE(m_pGraph); // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } count = m_audioFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } // release the device names attached to the item s data count = m_videoDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(item); delete [] pName; } count = m_audioDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(item); delete [] pName; } return CDialog DestroyWindow(); } //----------------------------------------------------------------------------- // OnSysCommand // void CDecklinkCaptureDlg OnSysCommand(UINT nID, LPARAM lParam) { if ((nID 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog OnSysCommand(nID, lParam); } } //----------------------------------------------------------------------------- // OnPaint // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CDecklinkCaptureDlg OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast WPARAM (dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog OnPaint(); } } //----------------------------------------------------------------------------- // HandleGraphEvent // At the moment we just read the event, discard it and release memory used to store it. void CDecklinkCaptureDlg HandleGraphEvent(void) { LONG lEventCode, lEventParam1, lEventParam2; if (!m_pMediaEvent) { return; } while (SUCCEEDED(m_pMediaEvent- GetEvent( lEventCode, reinterpret_cast LONG_PTR * ( lEventParam1), reinterpret_cast LONG_PTR * ( lEventParam2), 0))) { // just free memory associated with event m_pMediaEvent- FreeEventParams(lEventCode, lEventParam1, lEventParam2); } } //----------------------------------------------------------------------------- // WindowProc // Have to add our own message handling loop to handle events from the preview video // window and to pass Window events onto it - this is so it redraws itself correctly etc. LRESULT CDecklinkCaptureDlg WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_GRAPHNOTIFY HandleGraphEvent(); break; } // Pass all msgs to video window. vid window exists as child of static // picture frame. This ensures video window redraws itself etc. if (m_pIVW) { m_pIVW- NotifyOwnerMessage(reinterpret_cast LONG_PTR (m_hWnd) /* from me */, message, wParam, lParam); } return CDialog WindowProc(message, wParam, lParam); } //----------------------------------------------------------------------------- // OnQueryDragIcon // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CDecklinkCaptureDlg OnQueryDragIcon() { return static_cast HCURSOR (m_hIcon); } //----------------------------------------------------------------------------- // CreatePreviewGraph // Create a graph to preview the input // NOTE There are many ways of building graphs, you could opt for the ICaptureGraphBuilder interface which would // make things are lot simpler, however it doesn t always build the most efficient graphs. HRESULT CDecklinkCaptureDlg CreatePreviewGraph() { HRESULT hr = S_OK; if (m_pGraph) { // locate smart-T // NOTE The smart-T appears to hold references to its upstream connections even when its input pin // is diconnected. The smart-T has to be removed from the graph in order to clear these references which // is why the filter is enumerated and added every time the preview graph is built and removed whenever // it is destroyed. ASSERT(NULL == m_pSmartT); hr = CDSUtils AddFilter(m_pGraph, CLSID_SmartTee, L"Smart Tee", m_pSmartT); if (SUCCEEDED(hr)) { // DV preview is slightly different to all other previews if (ENC_DV != m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { // uncompressed, mpeg and wm preview // create the following // // Decklink Video Capture - Smart-T - AVI Decompressor - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // render the preview pin on the smart-T filter // first connect the Decklink video capture pin to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // now connect the preview pin of the smart-T to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", m_pVideoRenderer, NULL); } } else { // DV Preview // create the following // // Decklink Video Capture - AVI Decompressor - Smart-T - Colour Space Converter - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // this is a more efficient graph than created by the ICaptureGraphBuilder2 interface // add the AVI decompressor and colour space converter filters CComPtr IBaseFilter pAVIDecompressor = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AVIDec, L"AVI Decompressor", pAVIDecompressor); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pColourSpaceConverter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_Colour, L"Color Space Converter", pColourSpaceConverter); if (SUCCEEDED(hr)) { // conect the Decklink video capture pin to the AVI decompressor hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, pAVIDecompressor, NULL); if (SUCCEEDED(hr)) { // connect AVI decompressor to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, pAVIDecompressor, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // connect the preview pin of the smart-T to the colour space converter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", pColourSpaceConverter, NULL); if (SUCCEEDED(hr)) { // connect the colour space converter to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, pColourSpaceConverter, NULL, m_pVideoRenderer, NULL); } } } } } } } } else { hr = E_POINTER; } if (SUCCEEDED(hr)) { // the video path has been connected, initialise the preview window InitialiseVideoPreview(); // optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils RenderFilter(m_pGraph, m_pAudioCapture, L"Capture"); } // run the graph so that we can preview the input video if (m_pControl) { hr = m_pControl- Run(); } else { hr = E_POINTER; } } return hr; } //----------------------------------------------------------------------------- // CreateCaptureGraph // Create a graph to capture the input HRESULT CDecklinkCaptureDlg CreateCaptureGraph() { HRESULT hr = S_OK; // tack the file writer onto the preview graph if (m_pGraph m_pControl) { // stop the graph as we are about to modify it m_pControl- Stop(); // remove the default audio renderer so the Decklink audio capture filter // can be connected to the AVI mux, we will not preview audio whilst capturing CComPtr IPin pIPinOutput = NULL; hr = CDSUtils GetPin(m_pAudioCapture, L"Capture", pIPinOutput); if (SUCCEEDED(hr)) { // to disconnect both pins must be disconnected // find the pin connected to the Decklink audio capture pin CComPtr IPin pIPinConnection = NULL; hr = pIPinOutput- ConnectedTo( pIPinConnection); if (SUCCEEDED(hr)) { // disconnect the pins hr = m_pGraph- Disconnect(pIPinOutput); hr = m_pGraph- Disconnect(pIPinConnection); // get the owning filter of the downstream pin and remove it from the graph PIN_INFO pinInfo = {0}; hr = pIPinConnection- QueryPinInfo( pinInfo); if (SUCCEEDED(hr)) { if (pinInfo.pFilter) { hr = m_pGraph- RemoveFilter(pinInfo.pFilter); pinInfo.pFilter- Release(); } } } } // retrieve the capture filename m_captureFileCtrl.GetWindowText(m_captureFile); // store filename USES_CONVERSION; WCHAR captureFile[MAX_PATH]; wcsncpy(captureFile, A2W(m_captureFile), MAX_PATH); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetString("CaptureFile", reinterpret_cast const BYTE* (captureFile), sizeof(captureFile))); // decide the type of capture graph to build switch (m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { default case ENC_NONE hr = CreateUncompressedCaptureGraph(); break; case ENC_DV hr = CreateDVCaptureGraph(); break; case ENC_WM hr = CreateWMCaptureGraph(); break; } if (FAILED(hr)) { // there was a problem building the capture graph, issue a message // and rebuild preview graph char buffer[128]; StringCbPrintfA(buffer, sizeof(buffer), "The error 0x%08lx was detected when creating the capture graph with the following file name \r\n\r\n %s ", hr, m_captureFile); MessageBox(buffer, _T("Error"), MB_ICONERROR); OnBnClickedButtonStop();// destroy broken capture graph, build preview graph and enable controls } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // CreateUncompressedCaptureGraph // Create an optimum uncompressed capture graph HRESULT CDecklinkCaptureDlg CreateUncompressedCaptureGraph() { HRESULT hr = S_OK; // uncompressed capture // locate the AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateDVCaptureGraph // Create an optimum DV capture graph // NOTE that this will only work for SD HRESULT CDecklinkCaptureDlg CreateDVCaptureGraph() { HRESULT hr = S_OK; // locate the DV encoder, AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pDVEncoder = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DVVideoEnc, L"DV Video Encoder", pDVEncoder); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // configure the DV encoder CComQIPtr IDVEnc, IID_IDVEnc pIDV = pDVEncoder; if (pIDV) { // located a DV compression filter, set the format int videoFormat, dvFormat, resolution; hr = pIDV- get_IFormatResolution( videoFormat, dvFormat, resolution, FALSE, NULL); if (SUCCEEDED(hr)) { ASSERT(DVENCODERFORMAT_DVSD == dvFormat); ASSERT(DVENCODERRESOLUTION_720x480 == resolution); if ((DVENCODERVIDEOFORMAT_NTSC == videoFormat) (576 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to PAL if its NTSC videoFormat = DVENCODERVIDEOFORMAT_PAL; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } else if ((DVENCODERVIDEOFORMAT_PAL == videoFormat) (486 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to NTSC if its PAL videoFormat = DVENCODERVIDEOFORMAT_NTSC; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } } } if (SUCCEEDED(hr)) { // if the format is PAL, insert the Decklink field swap filter, PAL DV is the opposite // field order to PAL SD if (576 == m_vihDefault.bmiHeader.biHeight) { CComPtr IBaseFilter pPALFieldSwap = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DecklinkFieldSwap, L"Decklink PAL Field Swap", pPALFieldSwap); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the PAL field swap filter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pPALFieldSwap, NULL); if (SUCCEEDED(hr)) { // connect the field swap filter to the DV encoder hr = CDSUtils ConnectFilters(m_pGraph, pPALFieldSwap, NULL, pDVEncoder, NULL); } } } else { // connect the smart-T capture pin to the DV Encoder hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pDVEncoder, NULL); } if (SUCCEEDED(hr)) { // connect the DV encoder output to the AVI mux hr = CDSUtils ConnectFilters(m_pGraph, pDVEncoder, NULL, pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateWMCaptureGraph // Create an optimum Windows Media capture graph HRESULT CDecklinkCaptureDlg CreateWMCaptureGraph() { HRESULT hr = S_OK; // locate the asf writer filter and add it to the graph CComPtr IBaseFilter pASFWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_WMAsfWriter, L"WM ASF Writer", pASFWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pASFWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { hr = ConfigureWMEncoder(pASFWriter); } } if (SUCCEEDED(hr)) { if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, pASFWriter, MEDIATYPE_Audio); } if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, pASFWriter, MEDIATYPE_Video); if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } return hr; } //----------------------------------------------------------------------------- // ConfigureWMEncoder // Configure the Windows Media encoder HRESULT CDecklinkCaptureDlg ConfigureWMEncoder(IBaseFilter* pASFWriter) { HRESULT hr = S_OK; // modify the video output resolution of a system profile if (pASFWriter) { // simple system profile encoding CComQIPtr IConfigAsfWriter, IID_IConfigAsfWriter pICW = pASFWriter; if (pICW) { //NOTE You could just use the following for a default system profile //hr = pICW- ConfigureFilterUsingProfileGuid(WMProfile_XXX);// RE wmsysprf.h //NOTE If you want video only capture you must modify the profile to remove the audio // otherwise encoding will fail // Load a system profile and modify the resolution of the video output // NOTE The scope of the encoding is enormous, this just demonstrates how to change // the output video resolution from 320x240 to something larger. // Changing the resolution affects coding performance, it is likely that the encoder will // start to drop frames after a while. Using WM9 codecs will probably improve performance // and that has been left to the reader... ;o) // // get a profile manager CComPtr IWMProfileManager pIWMProfileManager = NULL; hr = WMCreateProfileManager( pIWMProfileManager); if (SUCCEEDED(hr)) { // load a system profile to modify CComPtr IWMProfile pIWMProfile = NULL; // NOTE Any WMProfile_XXX could be used here, or create a custom profile from scratch hr = pIWMProfileManager- LoadProfileByID(WMProfile_V80_FAIRVBRVideo, pIWMProfile); if (SUCCEEDED(hr)) { // search the streams for the video stream and attempt to modify the video size DWORD cbStreams = 0; hr = pIWMProfile- GetStreamCount( cbStreams); if (SUCCEEDED(hr)) { IWMStreamConfig* pIWMStreamConfig = NULL; GUID streamType = {0}; DWORD stream; if (m_bAudioMute) { // remove the audio stream for video only capture for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr)) { if (MEDIATYPE_Audio == streamType) { if (SUCCEEDED(pIWMProfile- RemoveStream(pIWMStreamConfig))) { --cbStreams; } SAFE_RELEASE(pIWMStreamConfig); break; } } } } } for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr) (MEDIATYPE_Video == streamType)) { // found the video stream CComQIPtr IWMMediaProps, IID_IWMMediaProps pIWMMediaProps = pIWMStreamConfig; if (pIWMMediaProps) { // get the size of the media type WM_MEDIA_TYPE* pMediaType = NULL; DWORD cbMediaType = 0; hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { pMediaType = (WM_MEDIA_TYPE*)new char [cbMediaType]; if (pMediaType) { hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { BITMAPINFOHEADER* pbmih = NULL; if (WMFORMAT_VideoInfo == pMediaType- formattype) { WMVIDEOINFOHEADER* pvih = (WMVIDEOINFOHEADER*)pMediaType- pbFormat; pbmih = pvih- bmiHeader; } else if (WMFORMAT_MPEG2Video == pMediaType- formattype) { WMVIDEOINFOHEADER2* pvih = (WMVIDEOINFOHEADER2*) ((WMMPEG2VIDEOINFO*)pMediaType- pbFormat)- hdr; pbmih = pvih- bmiHeader; } if (pbmih) { // modify the video dimensions, set the property, reconfigure the stream // and then configure the ASF writer with this modified profile pbmih- biWidth = 640;// was 320; pbmih- biHeight = 480;// was 240; pbmih- biSizeImage = pbmih- biWidth * pbmih- biHeight * pbmih- biBitCount / 8;// NOTE This calculation is not correct for all bit depths hr = pIWMMediaProps- SetMediaType(pMediaType); if (SUCCEEDED(hr)) { // config the ASF writer filter to use this modified system profile hr = pIWMProfile- ReconfigStream(pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pICW- ConfigureFilterUsingProfile(pIWMProfile); } } } } delete [] (char*)pMediaType; } } } } SAFE_RELEASE(pIWMStreamConfig); } } } } } /* // modify other ASF writer properties IServiceProvider* pProvider = NULL; hr = pASFWriter- QueryInterface(IID_IServiceProvider, reinterpret_cast void** ( pProvider)); if (SUCCEEDED(hr)) { IID_IWMWriterAdvanced2* pWMWA2 = NULL; hr = pProvider- QueryService(IID_IID_IWMWriterAdvanced2, IID_IID_IWMWriterAdvanced2, reinterpret_cast void** ( pWMWA2)); if (SUCCEEDED(hr)) { // set the deinterlace mode pWMWA2- GetInputSetting(...); SAFE_RELEASE(pWMWA2); } SAFE_RELEASE(pProvider); } */ } } else { hr = E_INVALIDARG; } return hr; } //----------------------------------------------------------------------------- // DestroyGraph // Remove all intermediate filters, keep any Decklink and video render filters as // these are used by all the graphs. HRESULT CDecklinkCaptureDlg DestroyGraph() { HRESULT hr = S_OK; if (m_pGraph m_pControl) { m_pControl- Stop(); // release our outstanding reference on this filter so it can be removed from the graph SAFE_RELEASE(m_pSmartT); // retrieve the name of the capture device, don t remove it in this method PWSTR pNameVideoCapture = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); PWSTR pNameAudioCapture = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); CComPtr IEnumFilters pEnum = NULL; hr = m_pGraph- EnumFilters( pEnum); if (SUCCEEDED(hr)) { IBaseFilter* pFilter = NULL; while (S_OK == pEnum- Next(1, pFilter, NULL)) { FILTER_INFO filterInfo = {0}; hr = pFilter- QueryFilterInfo( filterInfo); if (SUCCEEDED(hr)) { SAFE_RELEASE(filterInfo.pGraph); if ((NULL == wcsstr(filterInfo.achName, pNameVideoCapture)) (NULL == wcsstr(filterInfo.achName, pNameAudioCapture)) (NULL == wcsstr(filterInfo.achName, L"Video Renderer"))) { hr = m_pGraph- RemoveFilter(pFilter); if (SUCCEEDED(hr)) { hr = pEnum- Reset(); } } } SAFE_RELEASE(pFilter); } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // InitialiseVideoPreview // In short get the video screen renderer to draw into the picture control, which is our preview window // the following code sets this up, in addition to adding the HandleGraphEvent and WindowProc methods // read the DXSDK docos for more detailed information void CDecklinkCaptureDlg InitialiseVideoPreview(void) { // modify the preview window if (m_pVideoRenderer) { if (NULL == m_pIVW) { if (SUCCEEDED(m_pVideoRenderer- QueryInterface(IID_IVideoWindow, reinterpret_cast void** ( m_pIVW)))) { // get the window to handle redraws, etc // Set msg drain of VideoWindow to point to our dialog window. The dialog s // window procedure then handles events from the VideoWindow. HRESULT hr = m_pIVW- put_MessageDrain(reinterpret_cast OAHWND (m_hWnd)); if (NULL == m_pMediaEvent) { // Make graph send WM_GRAPHNOTIFY when it wants our attention see "Learning // When an Event Occurs" in the DX9 documentation. hr = m_pGraph- QueryInterface(IID_IMediaEventEx, reinterpret_cast void** ( m_pMediaEvent)); if (SUCCEEDED(hr)) { hr = m_pMediaEvent- SetNotifyWindow(reinterpret_cast OAHWND (m_hWnd), WM_GRAPHNOTIFY, 0); } // object created for it. RECT rc; m_preview.GetClientRect( rc); m_pIVW- SetWindowPosition(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); // VideoWindow is a child window of the bounding rect hr = m_pIVW- put_WindowStyle(WS_CHILD); hr = m_pIVW- put_Owner(reinterpret_cast OAHWND (m_preview.GetSafeHwnd())); hr = m_pIVW- SetWindowForeground(-1); } } } } } //----------------------------------------------------------------------------- // PopulateDeviceControl // Fill device combo box with available devices of the specified category HRESULT CDecklinkCaptureDlg PopulateDeviceControl(const GUID* pCategory, CComboBox* pCtrl) { HRESULT hr = S_OK; if (pCategory pCtrl) { // first enumerate the system devices for the specifed class and filter name CComPtr ICreateDevEnum pSysDevEnum = NULL; hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast void** ( pSysDevEnum)); if (SUCCEEDED(hr)) { CComPtr IEnumMoniker pEnumCat = NULL; hr = pSysDevEnum- CreateClassEnumerator(*pCategory, pEnumCat, 0); if (S_OK == hr) { IMoniker* pMoniker = NULL; bool Loop = true; while ((S_OK == pEnumCat- Next(1, pMoniker, NULL)) Loop) { IPropertyBag* pPropBag = NULL; hr = pMoniker- BindToStorage(0, 0, IID_IPropertyBag, reinterpret_cast void** ( pPropBag)); if (SUCCEEDED(hr)) { VARIANT varName; VariantInit( varName); hr = pPropBag- Read(L"FriendlyName", varName, 0); if (SUCCEEDED(hr)) { size_t len = wcslen(varName.bstrVal) + 1; PWSTR pName = new WCHAR [len]; StringCchCopyW(pName, len, varName.bstrVal); CW2AEX buf(varName.bstrVal); pCtrl- SetItemData(pCtrl- AddString(buf), (DWORD)pName); } VariantClear( varName); // contained within a loop, decrement the reference count SAFE_RELEASE(pPropBag); } SAFE_RELEASE(pMoniker); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateVideoControl // Fill video format combo box with supported video formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateVideoControl() { HRESULT hr = S_OK; if (m_pVideoCapture) { // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } m_videoFormatCtrl.ResetContent(); } // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (video formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(VIDEO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; VIDEO_STREAM_CONFIG_CAPS vscc; VIDEOINFOHEADER* pvih = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( vscc)); if (SUCCEEDED(hr)) { char buffer[128]; WORD PixelFormat; float FrameRate; ZeroMemory(buffer, sizeof(buffer)); pvih = (VIDEOINFOHEADER*)pmt- pbFormat; char* pPixelFormatLUT[] = {"4 2 2", "4 4 4"}; if (pvih- bmiHeader.biBitCount == 16) PixelFormat = 8; else if (pvih- bmiHeader.biBitCount == 20) PixelFormat = 10; else PixelFormat = pvih- bmiHeader.biBitCount; // provide a useful description of the formats if (486 == pvih- bmiHeader.biHeight) { if (417083 == pvih- AvgTimePerFrame) { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s (3 2 pulldown removal)", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if (576 == pvih- bmiHeader.biHeight) { StringCbPrintfA(buffer, sizeof(buffer), "PAL %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { char* pFrameRateFormat[] = {"%.2f", "%.0f"}; FrameRate = (float)(long)UNITS / pvih- AvgTimePerFrame; if ((720 == pvih- bmiHeader.biHeight) (59.94 FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((720 == pvih- bmiHeader.biHeight) (59.94 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((1080 == pvih- bmiHeader.biHeight) (50.00 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } } // add the item description to combo box int n = m_videoFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_videoFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pvih- AvgTimePerFrame == m_vihDefault.AvgTimePerFrame) (pvih- bmiHeader.biWidth == m_vihDefault.bmiHeader.biWidth) (pvih- bmiHeader.biHeight == m_vihDefault.bmiHeader.biHeight) (pvih- bmiHeader.biBitCount == m_vihDefault.bmiHeader.biBitCount)) { m_videoFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_videoFormatCtrl.AddString("ERROR Unable to retrieve video formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateAudioControl // Fill audio format combo box with supported audio formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateAudioControl() { HRESULT hr = S_OK; if (m_pAudioCapture) { // free mediatypes attached to format controls int count = m_audioFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } m_audioFormatCtrl.ResetContent(); } // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (audio formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(AUDIO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; AUDIO_STREAM_CONFIG_CAPS ascc; WAVEFORMATEX* pwfex = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( ascc)); if (SUCCEEDED(hr)) { char buffer[32]; ZeroMemory(buffer, sizeof(buffer)); pwfex = (WAVEFORMATEX*)pmt- pbFormat; // provide a useful description of the formats if (1 == pwfex- nChannels) { StringCbPrintfA(buffer, sizeof(buffer), "%d channel, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } else { StringCbPrintfA(buffer, sizeof(buffer), "%d channels, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } // add the item description to combo box int n = m_audioFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_audioFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pwfex- wFormatTag == m_wfexDefault.wFormatTag) (pwfex- nChannels == m_wfexDefault.nChannels) (pwfex- nSamplesPerSec == m_wfexDefault.nSamplesPerSec) (pwfex- nAvgBytesPerSec == m_wfexDefault.nAvgBytesPerSec)) { m_audioFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_audioFormatCtrl.AddString("ERROR Unable to retrieve audio formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateCompressionControl // Fill compression control with a selection of video compressors, locate the // encoders and add them to the combo box if they exist. HRESULT CDecklinkCaptureDlg PopulateCompressionControl() { int n = m_compressionCtrl.AddString("Uncompressed"); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_NONE); // search for the DV encoder, MPEG encoder and WM encoder IBaseFilter* pFilter = NULL; HRESULT hr = CoCreateInstance(CLSID_DVVideoEnc, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("DV Video Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_DV); SAFE_RELEASE(pFilter); } hr = CoCreateInstance(CLSID_WMAsfWriter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("Windows Media Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_WM); SAFE_RELEASE(pFilter); } m_compressionCtrl.SetCurSel(m_compressor); return S_OK; } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboVideodevice() { SAFE_RELEASE(m_pVideoCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // rebuild graph with new capture device selection PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pName, m_pVideoCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_vihDefault = *(VIDEOINFOHEADER*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateVideoControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudiodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboAudiodevice() { SAFE_RELEASE(m_pAudioCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pName, m_pAudioCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_wfexDefault = *(WAVEFORMATEX*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateAudioControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideoformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboVideoformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(m_videoFormatCtrl.GetCurSel()); m_vihDefault = *(VIDEOINFOHEADER*)pmt- pbFormat; ASSERT(sizeof(VIDEOINFOHEADER) = pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); // update compression control, we don t have an HD compression filter so disable compression for HD formats if (576 m_vihDefault.bmiHeader.biHeight) { m_compressor = 0; m_compressionCtrl.SetCurSel(m_compressor); // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); m_bEnableCompressionCtrl = FALSE; } else { m_bEnableCompressionCtrl = TRUE; } EnableControls(); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudioformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboAudioformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(m_audioFormatCtrl.GetCurSel()); m_wfexDefault = *(WAVEFORMATEX*)pmt- pbFormat; ASSERT(sizeof(WAVEFORMATEX) == pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboCompression // Rebuild preview graph if compression selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboCompression() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state m_compressor = m_compressionCtrl.GetCurSel(); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); // rebuild the graph hr = CreatePreviewGraph(); } } //----------------------------------------------------------------------------- // OnBnClickedCheckAudiomute // Rebuild the capture graph to reflect the new audio setting void CDecklinkCaptureDlg OnBnClickedCheckAudiomute() { CButton* pCheck = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); if (pCheck) { m_bAudioMute = pCheck- GetState() 0x0003; HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); // rebuild the graph which reflects the new audio setting hr = CreatePreviewGraph(); } } } //----------------------------------------------------------------------------- // OnBnClickedButtonBrowse // Create a file open dialog to browse for a file location void CDecklinkCaptureDlg OnBnClickedButtonBrowse() { char BASED_CODE szFilters[] = "Windows Media Files|*.avi;*.asf;*.wmv|All Files (*.*)|*.*||"; char* pExt[] = {"*.avi", "*.avi", "*.asf;*.wmv"}; CFileDialog FileDlg(TRUE, "Windows Media Files", pExt[m_compressor], 0, szFilters, this); if (FileDlg.DoModal() == IDOK) { m_captureFile = FileDlg.GetPathName(); m_captureFileCtrl.SetWindowText(m_captureFile); } } //----------------------------------------------------------------------------- // OnBnClickedButtonCapture // Create a capture graph a start capture void CDecklinkCaptureDlg OnBnClickedButtonCapture() { HRESULT hr = CreateCaptureGraph(); if (SUCCEEDED(hr)) { if (m_pControl) { hr = m_pControl- Run(); if (SUCCEEDED(hr)) { DisableControls(); } } } } //----------------------------------------------------------------------------- // OnBnClickedButtonStop // Stop capture and revert to preview void CDecklinkCaptureDlg OnBnClickedButtonStop() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); if (SUCCEEDED(hr)) { EnableControls(); } } } //----------------------------------------------------------------------------- // EnableControls // void CDecklinkCaptureDlg EnableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); m_bEnableCompressionCtrl = (576 m_vihDefault.bmiHeader.biHeight) ? FALSE TRUE;// don t have an HDV codec do disable compression control for HD formats pWnd- EnableWindow(m_bEnableCompressionCtrl); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(FALSE); } //----------------------------------------------------------------------------- // DisableControls // void CDecklinkCaptureDlg DisableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(TRUE); } //----------------------------------------------------------------------------- // QueryRegistry // retrieve previous media formats from registry void CDecklinkCaptureDlg QueryRegistry(void) { if (ERROR_SUCCESS == m_regUtils.Open("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoFormat", reinterpret_cast LPBYTE ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioFormat", reinterpret_cast LPBYTE ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioMute", reinterpret_cast LPBYTE ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoCompressor", reinterpret_cast LPBYTE ( m_compressor), sizeof(m_compressor))); WCHAR captureFile[MAX_PATH]; ZeroMemory(captureFile, sizeof(captureFile)); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetString("CaptureFile", reinterpret_cast LPBYTE (captureFile), sizeof(captureFile))); m_captureFile = captureFile; } else { // create the key and registry values if (ERROR_SUCCESS == m_regUtils.Create("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); } } // update mute audio check box control CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); pButton- SetCheck(m_bAudioMute); }
https://w.atwiki.jp/stones/pages/161.html
COVERED BY THE ROLLING STONES IN STUDIO 1962 1 Soon Forgotten (Muddy Waters) 2 Close Together (Jimmy Reed) 3 You Can t Judge A Book By The Cover (Bo Diddley) ■Around Around (Invasion Unlimited IU9531-1) includes track 3 mono COVERED BY THE ROLLING STONES IN STUDIO 1963 1 Road Runner (Bo Diddley) 2 Diddley Daddy (Bo Diddley) 3 I Want To Be Loved (Muddy Waters) 4 Baby What s Wrong (Jimmy Reed) 5 Bright Lights, Big City (Jimmy Reed) 6 Come On (Chuck Berry) 7 Fortune Teller (Benny Spellman) 8 Poison Ivy (The Coasters) 9 Bye Bye Johnny (Chuck Berry) 10 You Better Move On (Arthur Alexander) 11 I Wanna Be Your Man (The Beatles) 12 Green Onions (Booker T. The MG s) 13 Money (That s What I Want) (Barret Strong) 14 Go Home, Girl (Arthur Alexander) ■IBC Demos 1963 (The Swingin Pig TSP-CDS-001) includes tracks 1-5 mono ■SINGLES COLLECTION / THE LONDON YEARS (abkco 92312) includes tracks 6,11-12 mono ■MORE HOT ROCKS (abkco 96262) includes tracks 7-9,13 mono ■DECEMBER S CHILDREN (abkco 94512) includes track 10 mono ■Time Trip Vol. 5 (Scorpio TT5) includes track 3 mono COVERED BY THE ROLLING STONES IN STUDIO 1964 1 Route 66 (Chuck Berry) 2 Mona (I Need You Baby) (Bo Diddley) 3 Carol (Chuck Berry) 4 You Can Make It If You Try (Gene Allison) 5 Walking The Dog (Rufus Thomas) 6 Honest I Do (Jimmy Reed) 7 I m A King Bee (Slim Harpo) 8 Not Fade Away (Buddy Holley) 9 Can I Get A Witness (Marvin Gaye) 10 I Just Want To Make Love To You (Muddy Waters) 11 Don t Lie To Me (Chuck Berry) 12 It s All Over Now (Valentinos) 13 I Can t Be Satisfied (Muddy Waters) 14 Confenssin The Blues (Little Walter) 15 Around Around (Chuck Berry) 16 Look What You ve Down (Muddy Waters) 17 Down The Road Apiece (Chuck Berry) 18 If You Need Me (Solomon Burke) 19 Hi-Heel Sneakers (Tommy Tucker) 20 Down In The Bottom (Howlin Wolf) 21 Tell Me Baby, How Many More Time (Big Bill Broonzy) 22 Reelin Rockin (Chuck Berry) 23 Time Is On My Side (Irma Thomas) 24 The Red Rooster (Howlin Wolf) 25 You Can t Catch Me (Chuck Berry) 26 Under The Boardwalk (The Drifters) 27 Susie Q (Dale Hawkins) 28 Everybody Needs Somebody To Love (Solomon Burke) 29 Down Home Girl (Alvin Robinson) 30 Pain In My Heart (Otis Redding) 31 Hitch Hike (Marvin Gaye) 32 Oh Baby (We Got A Good Thing Goin ) (Barbara Lynn) 33 Mercy, Mercy (Don Covay) 34 Key To The Highway (Jazz Gillum) ■THE ROLLING STONES (abkco 93752) includes tracks 1, 3-10 mono ■THE ROLLING STONES, NOW! (abkco 94202) includes tracks 2, 25,29-30 mono ■METAMORPHOSIS (abkko 90062) includes track 11 stereo ■12X5 (abkco 94022) includes tracks 12,14-15,18 stereo, tracks 26-27 mono ■MORE HOT ROCKS (abkco 96262) includes track 13 stereo, track 28 mono ■DECEMBER S CHILDREN (abkco 94512) includes track 16 stereo ■THE ROLLING STONES, NOW! (abkco 94202) includes track 17 stereo ■The Black Box CD-1 (Yellow Dog YD 046) includes tracks 19-21 stereo ■Reelin Rockin (VGP-274) includes track 22 mono ■HOT ROCKS 1964-1971 (abkco 96672) includes track 23 stereo ■SINGLES COLLECTION / THE LONDON YEARS (abkco 92312) includes track 24 mono ■OUT OF OUR HEADS (abkco 94302) includes tracks 31-33 mono ■Time Trip Vol. 5 (Scorpio TT5) includes track 34 mono COVERED BY THE ROLLING STONES IN STUDIO 1965 1 That s How Strong My Love Is (Otis Redding) 2 Fannie Mae (Buster Brown) 3 Good Times (Sam Cooke) 4 Cry To Me (Solomon Burke) 5 I ve Been Loving You Too Long (To Stop Now) (Otis Redding) 6 My Girl (The Temptations) 7 She Said "Yeah" (Larry Williams) 8 I m Talkin About You (Chuck Berry) ■OUT OF OUR HEADS (abkco 94302) includes tracks 1-4, 7-8 mono ■MORE HOT ROCKS (abkco 96262) includes track 5 stereo ■FLOWERS (abkco 95092) includes track 6 stereo COVERED BY THE ROLLING STONES IN STUDIO 1966 1 Trouble In Mind (R.Jones) ■Hot Stuff Volume Two (Great Dane Records GDR 9417/ABCD) includes track 1 mono COVERED BY THE ROLLING STONES IN STUDIO 1967 1 She Comes In Colors (Love) ■THEIR SATANIC MAJESTIES REQUEST (abkco 90022) includes track 1 stereo COVERED BY THE ROLLING STONES IN STUDIO 1968 1 Rock Me Baby (B.B. King) 2 Hold On, I m Comin (Sam Dave) 3 I ll Coming Home () 4 That s No Way To Get Along (Robert Wilkins) 5 Still A Fool (Muddy Waters) ■Surrey Rehearsals 1968 (VGP-108) includes tracks 1-3 mono ■BEGGARS BANQUET (abkco 95394) includes track 4 stereo ■The Trident Mixes (DAC-052) includes track 5 stereo COVERED BY THE ROLLING STONES IN STUDIO 1969 1 Love In Vain (Robert Johnson) 2 I Don t Know Why (Stevie Wonder) 3 You Gotta Move (Fred McDowell) ■LET IT BLEED (abkco 90042) includes track 1 stereo ■METAMORPHOSIS (abkko 90062) includes track 2 stereo ■STICKY FINGERS (Virgin Records CDV 2730) includes track 3 stereo COVERED BY THE ROLLING STONES IN STUDIO 1970 1 Shake Your Hips (Slim Harpo) 2 Stop Breakin Down Blues (Robert Johnson) ■EXILE ON MAIN ST. (Virgin Records CDV 2731) includes tracks 1-2 stereo BACK / NEXT